C++ 拓展库头文件解决方法

Upd on 2023/4/24:整理博客的时候发现以前写错了,Dev 一个 IDE 哪里会有问题呢?其实是 TDM-GCC 的问题。

库是一个神奇的东西。C++ 的标准库众所周知地使用 std 作为名字空间。但是 C++ 还包含许多拓展库,比如 pb_ds 和 cxx。下图标蓝的就是可用的库的命名空间:

image

但是,要使用名字空间里面的类,必须声明头文件……然而这些头文件名字又和命名空间不一样……超级难记。幸好 C++ 为我们提供了两个强力的头文件:<bits/stdc++.h><bits/extc++.h>。他们包括了算法竞赛所有可能用到的头文件!

本来事情到这里就结束了,但是 TDM-GCC 他要整活!当你用 TDM-GCC 编译时(这里使用的是 TDM-GCC 4.9.2),使用 #include<bits/extc++.h> 会报错。原因是 <bits/extc++.h> 中声明的 <ext/codecvt_specializations.h> 中声明的 <iconv.h> 不存在!怎么办?难道只能死记硬背子标头了吗?有两个方法可以化解这场危机。

  1. 很简单,既然 TDM-GCC 出错,那我换一个编译器不就好了吗?比如说 MinGW-w64。

  1. 非要用 TDM-GCC?没关系,也有办法。按照如下步骤走。

    1. 创建一个程序包含 <bits/extc++.h>
    2. 用 DevC++ 编译。显然他会报错。
    3. 在报错那一栏里面你可以找到 extc++.h 的路径
    4. 再利用路径找到 extc++.h 并打开。现在里面就有你想要的头文件啦!记得不要用 <ext/codecvt_specializations.h>,我相信你也用不上。
  2. 还有个办法,按照这个路径打开(首先打开 DevC++ 的文件夹):.\MinGW64\lib\gcc\x86_64-w64-mingw32\4.9.2\include\c++。拓展库文件在 ext 文件夹内。